# -*- coding: utf-8 -*-

# @Project : DDT_FrameWork
# @Author  : Mr.Deng
# @Time    : 2021/9/15 23:33

"""
项目中封装的装饰器
"""

from common.tools.logConfig import Logger

import traceback

# 实例化类文件
Log = Logger().origin_logger


def error_collection(func):
    """
    错误日志收集器
    :param func:
    :return:
    """

    def inner(*args, **kwargs):
        try:
            returnValue = func(*args, **kwargs)
        except:
            Log.error("\n" + traceback.format_exc())
        else:
            return returnValue

    return inner


def skip_case(func):
    """
    跳过测试用例，测试数据中必须包含 isRun字段用来判断是否执行

    ** ddt数据驱动中使用unittest框架中的skip方法会跳过整个测试用例
    :param func:
    :return:
    """

    def inner(self, testData):
        if "isRun" not in testData.keys():
            raise TypeError(f"测试数据类型不正确，没有检测到 isRun 键！！！数据：\n{testData}")
        # yaml文件中yes,no 读取后会返回 bool类型数据，yaml文件中强制字符串 !!str yes
        if testData["isRun"] in ["yes", True]:
            func(self, testData)
        elif testData["isRun"] in ["no", False]:
            Log.warning(f"-Skipping: --- 跳过不执行该测试用例：{func.__name__} ---")
        else:
            raise TypeError(f"跳过执行测试用例字段：{testData['isRun']}不正确！！！项目允许字段：yes、no ")

    return inner
